Nearly all data processing applications involve operations that must be iteratively performed on sets of data. Such program loops may include any number of instructions and may be iterated any number of times as estabilshed by the computer program. In order to effectuate such program loops, it is generally necessary to have some means for counting the number of iterations that have been performed and to perform a conditional branch at the end of the loop based on the value count. If the count has reached a predetermined terminal value, the loop is exited and program control passes to the next instruction following the loop or to some other specified instruction location. If the count has not reached the predeternined terminal value, program control returns to the beginning of the loop in order to reiterate the instructions in the loop. At some convenient point in the loop, the count is incremented. Certain data processing systems implement an instruction that concurrently increments (or decrements) the count and tests the value of the count.
Prior art data processing systems require a minimum of two or three clocks to maintain and test a loop counter and to perform conditional branching. This imposes a significant execution overhead, particularly if a large number of relatively short loops must be performed. Thus, one way to increase the operational throughput of a data processing system is to reduce the amount of program overhead associated with conditional branching at the end of a program loop.